﻿#include <vector>
#include <list>
#include <pthread.h>
#include "threadPoolTask.h"


CThreadPoollTask* CThreadPoollTask::pPoolTask = nullptr;

std::mutex CThreadPoollTask::mutex_j;

CThreadPoollTask::GCj  CThreadPoollTask::gcj;

CThreadPoollTask::CThreadPoollTask()
{
	m_ThreadObjNum = 0 ;
	
}
    
CThreadPoollTask::~CThreadPoollTask()
{
	
}
bool CThreadPoollTask::Start(int ThreadObjNum)
{
	m_ThreadObjNum = ThreadObjNum;
	for(int i = 0; i < ThreadObjNum; ++i)
    {
        CThreadlTask *pThreadObj = new CThreadlTask;

		pThreadObj->Start(i);

        m_ThreadVector.push_back(pThreadObj);
    }
	return  true;
}
void CThreadPoollTask::Stop()
{
    
	for(int i = 0; i < m_ThreadObjNum; ++i)
    {
		m_ThreadVector[i]->Stop();

        delete m_ThreadVector[i];
    }
    m_ThreadVector.clear();
	
}
void CThreadPoollTask::AddTask(int nID, char  *szTask)
{

    //printf("AddTask JobTask:%d********************\n", nID);

	m_ThreadVector[nID]->AddTask(szTask);

}	

CThreadPoollTask* CThreadPoollTask::GetObject()
{
	static CThreadPoollTask cPool;

	return &cPool;
}

CThreadPoollTask* CThreadPoollTask::GetInstance()
{
    if (pPoolTask == nullptr) //指针为空，则创建管理器
    {
        std::lock_guard<std::mutex> lock(mutex_j);
        if (pPoolTask == nullptr) //双重检测
        {
            pPoolTask = new CThreadPoollTask();
        }
    }
    return pPoolTask;
}